package com.zhang.queue;

/**
 * 队列可以使用数组和链表实现
 * 使用数组实现队列
 */
public class ArrayQueueDemo {

  public static void main(String[] arg0)
  {

      ArrayQueue arrayQueue=new ArrayQueue(3);
      arrayQueue.addQueue(1);
      System.out.println(arrayQueue.headQueue());;

  }

  static class ArrayQueue{
      private  int maxSize; //表示数组的容量
      private  int front;   //指向队列头
      private  int rear;   //指向队尾
      private  int[] arr;   //队列数据

      ArrayQueue(int size)
      {
          maxSize=size;
          arr=new int[maxSize];
          //todo 注意队列初始化给值
          front=-1;   //指向队列头,是队列头前一个位置
          rear=-1;    //指向队尾，指向最后一个数据
      }

      public  boolean isFull(){
          return rear==maxSize-1;
      }

      public boolean isEmpty(){
          return rear==front;
      }

      /**
       * 添加数据
       * @param data
       */
      public  void  addQueue(int data)
      {
          if (isFull())
          {
              System.out.println("队列已满");
              return;
          }
          rear++;
          arr[rear]=data;
      }

      /**
       * 获取最前端数据
       * @return
       */
      public  int getQueue()
      {
          if (isEmpty())
          {
             throw new RuntimeException("队列为空");
          }
          front++;
          return arr[front];
      }

      /**
       * 显示队列数据
       */
      public void showQueue()
      {
          if (isEmpty())
          {
              System.out.println("队列暂无数据");
              return;
          }
          for (int i=0; i<arr.length;i++)
          {
              System.out.printf("arr[%d]=%d\n",i,arr[i]);
          }
      }

      public  int headQueue()
      {
          if (isEmpty())
          {
            throw new RuntimeException("队列暂无数据");
          }
          return arr[front+1];
      }

  }
}
